#include "stm32f10x.h"
#include "xos_core_c.h"
#include "xos_bsp_systic.h"

void DEV_DelayMs(uint32_t uiMs)
{
    uint32_t i;
    uint32_t j;

    j = 5540 * uiMs;
    for(i = 0; ; i++)
    {
        if(i == j)
        {
            break;
        }
    }
}

uint32_t change;
xos_core_stk_reg now;
xos_core_stk_reg next;
void task1()
{
	TIM_DeInit(TIM1);
	while(1)
	{
		change=0;
		GPIO_ResetBits(GPIOC,GPIO_Pin_4);
		DEV_DelayMs(100);
		xos_core_switch(); //调度
	}
}
void task2()
{
	//uint32_t i;
	while(1)
	{
		change=1;
		GPIO_SetBits(GPIOC,GPIO_Pin_4);
		DEV_DelayMs(200);
		xos_core_switch();//调度
	}
}
void System_NVIC_Init()
{
  NVIC_InitTypeDef	  NVIC_InitStructure;
  /*
  STM32把指定中断优先级的寄存器位减少到4位，这4个寄存器位的分组方式如下：
  
  第0组：所有4位用于指定响应优先级
  
  第1组：最高1位用于指定抢占式优先级，最低3位用于指定响应优先级
  
  第2组：最高2位用于指定抢占式优先级，最低2位用于指定响应优先级
  
  第3组：最高3位用于指定抢占式优先级，最低1位用于指定响应优先级
  
  第4组：所有4位用于指定抢占式优先级
  优先组为0
  代表所有优先级按响应方式
  */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);      
  
  
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  //打开USART中断通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;          //子优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //中断通道使能
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  NVIC_Init(&NVIC_InitStructure);
  
}
 int main(void)
{
	GPIO_InitTypeDef gpiodef;
	gpiodef.GPIO_Mode=GPIO_Mode_Out_OD;
	gpiodef.GPIO_Speed=GPIO_Speed_50MHz;
	gpiodef.GPIO_Pin=GPIO_Pin_4;
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC,ENABLE);
	GPIO_Init(GPIOC,&gpiodef);
	GPIO_SetBits(GPIOC,GPIO_Pin_4);
	System_NVIC_Init();
	// __set_PRIMASK(1);
//	xos_bsp_systic_init();
	ii=0;
	xos_core_create_task(task1,&now);
	xos_core_create_task(task2,&next);
	xos_core_star();	
	
  //__set_PRIMASK(0);	// 开中断  
	while(1)DEV_DelayMs(200);
}


